package srv;

import java.util.Date;
import java.util.List;

import dao.MozoDAO;
import dao.PedidoDAO;
import exceptions.MesaException;
import exceptions.MozoException;
import negocio.Mesa;
import negocio.Mozo;
import negocio.Pedido;

public class MozoSRV 
{
	private static MozoDAO dao;
	private static PedidoDAO daoPedido;
	static 
	{
		dao = MozoDAO.getInstancia();
		daoPedido = PedidoDAO.getInstancia();
	}
	
	public Mozo buscarMozo(int dniMozo) throws MozoException
	{
		try {
			Mozo m = dao.getMozo(dniMozo);
			return m;
		} catch (Exception e) {
			throw new MozoException("No se encontro el mozo.");
		}
	}
	
	public void abrirMesa(int numeroMesa, 
			int cantPersonas, Date fecha) 
			throws MozoException, MesaException
	{
		Mozo m = obtenerMozoPorNumeroMesa(numeroMesa);
		m.abrirMesa(numeroMesa, cantPersonas, fecha);
		dao.update(m);
	}
	
	public void unirMesas(List<Integer> nroMesas, 
			int maxCantPersonas) 
			throws MozoException, MesaException
	{
		//TODO: verificar que todas las mesas pertenezcan al mismo sector.
		Mozo m = obtenerMozoPorNumeroMesa(nroMesas.get(0));
		m.unirMesas(nroMesas, maxCantPersonas);
	}
	
	public void cerrarMesa(int numeroMesa) 
			throws MozoException, MesaException
	{
		Mozo m = obtenerMozoPorNumeroMesa(numeroMesa);
		m.cerrarMesa(numeroMesa);
		dao.update(m);
	}
	
	public void liberarMesa(int numeroMesa) 
			throws MozoException, MesaException
	{
		Mozo m = obtenerMozoPorNumeroMesa(numeroMesa);
		Mesa mesa = m.getSector().buscarMesa(numeroMesa);
		List<Pedido> pedidos = mesa.getPedidos();
		eliminarPedidosDeMesa(pedidos);
		m.liberarMesa(numeroMesa);
		dao.update(m);
	}
	
	private void eliminarPedidosDeMesa(List<Pedido> pedidos)
	{
		for(Pedido p : pedidos){
			daoPedido.delete(p);
		}
	}
	
	public List<Mozo> getAllMozos() throws MozoException{
		try{
			return dao.getAllMozos();
		}catch (Exception e) {
			throw new MozoException("no existe ningun mozo cargado en la base");
		}
	}
	
	public List<Mozo> cargarMozos() throws MozoException{
		
		try{
			return dao.getAllMozos();
		}catch (Exception e) {
			throw new MozoException("no exiten mozos en el sistema");
		}
	}
	
	private Mozo obtenerMozoPorNumeroMesa(int numeroMesa)
	{
		return dao.getMozoPorNumeroMesa(numeroMesa);
	}
}
